package main

import (
	"github.com/patrickmn/go-cache"
	"sync"
	"time"
)

var once sync.Once //确保只会执行一次
var gCache *cache.Cache

// GetCache - 获取全局的缓存
// 参数：无
// - ：描述参数 param1 的用途。
// 返回值：
func getCache() *cache.Cache {
	once.Do(func() {
		gCache = cache.New(cache.DefaultExpiration, 10*time.Minute)
	})
	return gCache
}

// Set - 写缓存
// 参数：
// k ：缓存的key值
// x ：缓存的值
// d ：超时清除时间,cache.NoExpiration -无超时；1*time.Second 1秒超时
// 返回值： 无
func Set(k string, x interface{}, d time.Duration) {
	c := getCache()
	c.Set(k, x, d)
}

// Get - 读缓存
// 参数：
// k ：缓存的key值
// 返回值： 缓存对象,是否返回成功
func Get(k string) (interface{}, bool) {
	c := getCache()
	return c.Get(k)
}

// Delete - 删除缓存
// 参数：
// k ：缓存的key值
// 返回值： 缓存对象,是否返回成功
func Delete(k string) {
	c := getCache()
	c.Delete(k)
}

//
//func main() {
//	c := getCache()
//	// 设置一个键值对，1秒后过期
//	c.Set("foo", "bar", 1*time.Second)
//	// 获取并打印键的值
//	if value, found := c.Get("foo"); found {
//		fmt.Println("Found foo:", value)
//	} else {
//		fmt.Println("foo not found")
//	}
//	// 等待1.5秒后再次获取键的值
//	time.Sleep(1 * time.Second)
//	if value, found := c.Get("foo"); found {
//		fmt.Println("Found foo:", value)
//	} else {
//		fmt.Println("foo not found")
//	}
//	// 设置一个永不过期的键值对
//	c.Set("baz", "qux", cache.NoExpiration)
//	// 获取并打印键的值
//	if value, found := c.Get("baz"); found {
//		fmt.Println("Found baz:", value)
//	} else {
//		fmt.Println("baz not found")
//	}
//	//
//	// 删除一个键值对
//	c.Delete("baz")
//	// 尝试获取被删除的键值对
//	if value, found := c.Get("baz"); found {
//		fmt.Println("Found baz:", value)
//	} else {
//		fmt.Println("baz not found")
//	}
//}
